package storage

import (
	"github.com/ethereum/go-ethereum/common"
	"github.com/holiman/uint256"
)

//运行时只使用到了Geth的StateDB中的readOnly的函数
//需要注意的是Geth使用的256位的Int还是*big.Int，这里为了代码的统一，都使用*uint256.Int
type StateDB interface {
	//ReadOnly
	GetBalance(common.Address) *uint256.Int
	GetNonce(common.Address) uint64 //注意nonce的值是uint64
	GetCodeHash(common.Address) common.Hash
	GetCode(common.Address) []byte
	GetCodeSize(common.Address) int
	GetState(common.Address, common.Hash) *uint256.Int

	//Write
	CreateAccount(common.Address)
	SetNonce(common.Address, uint64)
	SetState(common.Address, common.Hash, *uint256.Int)
	SubBalance(common.Address, *uint256.Int)
	AddBalance(common.Address, *uint256.Int)
}
